what to learn to become a full stack java developer